import 'dart:async';

import 'package:flutter/material.dart';
import 'package:hi_base/log.dart';
import 'package:flutter/foundation.dart';

class HiDefend {
  run(Widget app) {
    // 框架异常
    FlutterError.onError = (FlutterErrorDetails details) async {
      // print(details);
      // 线上环境，走上报逻辑
      if (kReleaseMode) {
        Zone.current.handleUncaughtError(details.exception, details.stack);
      } else {
        // 开发期间，走console抛出
        FlutterError.dumpErrorToConsole(details);
      }
    };
    // dart代码异常
    runZonedGuarded<Future<Null>>(
      () async => runApp(app),
      (e, s) => _reportError(e, s),
    );
  }

  // 通过接口上报异常
  // ---思考埋点的时候是不是也可以通过StateError('type:xx');这种抛出然后捕获，然后截取字符串，然后处理上报
  _reportError(Object e, StackTrace stack) async {
    // bugly异常上报 可以看插件 --文档查看
    // 注意这里监听的是全局没有处理的异步错误
    hyLog('错误信息:$e,错误位置:${stack}', StackTrace.current);
  }
}
